package com.zrh.jsd.service.studydemo.common_thread;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/*
 * 可重入锁：
 * 当线程 T1 执行到 ① 处时，已经获取到了锁 rtl ，当在 ① 处调用 get() 方法时，会在 ② 再次对锁 rtl 执行加锁操作。
 * 此时，如果锁 rtl 是可重入的，那么线程 T1 可以再次加锁成功；如果锁 rtl 是不可重入的，那么线程 T1 此时会被阻塞
 * */
class X {
    public static void main(String[] args) {

        int count = 1;

        int a = count;

        count = 2;
        System.out.println(count);
        System.out.println("a=="+a);

        AtomicReference<Integer> m = new AtomicReference<>(Integer.MAX_VALUE);


       /* if(a == b){
            System.out.println(true);
        }else{
            System.out.println(false);
        }*/

    }
    private final Lock rtl = new ReentrantLock();
    int value;

    public int get() {
        // 获取锁
        rtl.lock(); // 2
        try {
            return value;
        } finally {
            // 保证锁能释放
            rtl.unlock();
        }
    }

    public void addOne() {
        // 获取锁
        rtl.lock();  // 1
        try {
            value = 1 + get();
        } finally {
            // 保证锁能释放
            rtl.unlock();
        }
    }
}